<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Transform</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/default.css" rel="stylesheet" type="text/css">
</head>
<body>

<h1>Transform</h1>

<p>执行各种数学功能, 按位运算, 和类似 ASCII/Unicode 转换的任务.</p>

<pre class="Syntax">Transform, OutputVar, Cmd, Value1 [, Value2]</pre>
<h3>参数</h3>
<table class="info">
  <tr>
    <td>OutputVar</td>
    <td>用于保存 <em>Cmd</em> 结果的变量名称. <a href="SetFormat.htm">SetFormat</a> 决定了整数结果是保存为十六进制还是十进制.</td>
  </tr>
  <tr>
    <td width="15%">Cmd, Value1/2</td>
    <td width="85%">见下表.</td>
  </tr>
</table>

<h3>Cmd, Value1, Value2</h3>
<p><em>Cmd</em>, <em>Value1</em> 和 <em>Value2</em> 参数相互依赖, 它们的用法描述如下.</p>
<p><strong><a name="Unicode"></a>Unicode [, String]</strong>: 从剪贴板中获取 Unicode 文本或保存 Unicode 文本到剪贴板上. 注意: 使用 <a href="../misc/Clipboard.htm#ClipboardAll">ClipboardAll</a> 的方法可以保存和恢复整个剪贴板的内容, 这种方法使得 "Transform Unicode" 操作时不会丢失剪贴板的原始内容.</p>
<p>此子命令的两种操作模式举例如下:</p>
<pre>Transform, OutputVar, Unicode  <em>; Retrieves the clipboard's Unicode text as a UTF-8 string.</em>
Transform, Clipboard, Unicode, %MyUTF_String%  <em>; Places Unicode text onto the clipboard.</em></pre>
<p>在上面的第二个例子中, %MyUTF_String% 可以使用原义的 UTF-8 字符串代替.</p>
<p>使用热键得到一个给定的 Unicode 字符串相应的 UTF-8 字符串, 例如:</p>
<pre>^!u::  <em>; Control+Alt+U hotkey.</em>
MsgBox Copy some Unicode text onto the clipboard, then return to this window and press OK to continue.
Transform, ClipUTF, Unicode
Clipboard = Transform, Clipboard, Unicode, %ClipUTF%`r`n
MsgBox The clipboard now contains the following line that you can paste into your script. When executed, this line will cause the original Unicode string you copied to be placed onto the clipboard:`n`n%Clipboard%
return</pre>
<p>请注意: 1) Windows 95 系统需要 <em>Microsoft 的 Unicode 支持层</em> 才能支持此子命令 (Windows 98/Me/NT4 或更高版本系统中已经内置这个支持); 2) "<a href="Send.htm#asc">Send {ASC nnnnn}</a>" 命令是生成 Unicode 字符的一种可选方法, 但其并不是在所有的应用程序中都有效.</p>
<p><strong><br>
Asc, String</strong>: 获取 <em>String</em> 中首个字符的 ASCII 码 (一个介于 1 和 255 之间的数字). 如果 <em>String</em> 为空, <em>OutputVar</em> 也将被置空. 例如: <em>Transform, OutputVar, Asc, %VarContainingString%</em>. 对应函数: <a href="../Functions.htm#Asc">Asc(String)</a>.</p>
<p><strong>Chr, Value1</strong>: 获取 ASCII 码为 <em>Value1</em> 的单个字符. 如果 <em>Value1</em> 不是 1 和 255 及其之间的数字, <em>OutputVar</em> 将被置空来表明此问题. 例如: <em>Transform, OutputVar, Chr, 130</em>. 对应函数: <a href="../Functions.htm#Chr">Chr(Number)</a>.</p>
<p><strong><a name="Deref"></a>Deref, String</strong>: 展开变量引用和包含在其他变量中的 <a href="_EscapeChar.htm">转义序列</a>. 任何糟糕格式的变量引用在展开时将被忽略. 把 <em>OutputVar</em> 展开为其内容也是如此; 换句话说, 在 <em>String</em> 的变量中任何对 <em>OutputVar</em> 引用在展开时将被忽略 (但请注意 <em>String</em> 自身可以 <u>是</u> %<em>OutputVar</em>%). 在下面的例子中, 如果 var1 包含字符串 "test" 而 var2 包含 <u>原义的</u> 字符串 "%var1%", 此时 <em>OutputVar</em> 将被赋值为字符串 "test": <em>Transform, OutputVar, deref, %var2%</em>. 在 <a href="../Functions.htm">函数</a> 内, <em>String</em> 中的每个变量总是解析为局部变量, 只有在局部变量不存在时才解析为全局变量 (如果没有则为空).</p>
<p><strong><a name="HTML"></a>HTML, String [, Flags]</strong>:</p>
<p><em>在 AutoHotkey 和 AutoHotkey_L ANSI 版本中:</em> <em>Flags</em> 参数可以省略. 通过把 ASCII 值大于 127 的字符译成它们的 HTML 名称来把 <em>String</em> 转换为其 HTML 对应字符串 (例如 &pound; 译成 &amp;pound;). 此外, 这四个字符 "&amp;&lt;&gt; 依次被译成 &amp;quot;&amp;amp;&amp;lt;&amp;gt;. 最后, 每个换行符 (`n) 被译成 &lt;br&gt;`n (即 &lt;br&gt; 后面跟着一个换行符).</p>
<p><em>在 AutoHotkey_L Unicode 版本中:</em> 除了上述的功能外, <em>Flags</em> 可以为零或下列值的组合 (和). 如果省略, 默认为 1.<p>
<ul>
    <li>1: 把某些字符转换成命名表示法, 例如 &euro; 被转换成 <code>&amp;euro;</code></li>
    <li>2: 把某些字符转换成编号表示法, 例如 &euro; 被转换成 <code>&amp;#8364;</code></li>
</ul>
<p>仅影响非 ASCII 字符. 如果 <i>Flags</i> = 3, 仅在命名表示法不可用的情况下才使用编号表示法. 后面的这些字符总是需要转换: <code>&lt;&gt;&quot;&amp;</code> 和 <code>`n</code> (换行符). </p>
<p><strong><a name="FromCodePage"></a>FromCodePage</strong> / <strong><a name="ToCodePage"></a>ToCodePage</strong>: 不赞成使用. 使用 <a href="StrPutGet.htm">StrPut() / StrGet()</a> 代替.</p>
<p><strong>Mod, Dividend, Divisor</strong>: 获取被除数 <em>Dividend</em> 除以除数 <em>Divisor</em> 后得到的余数. 如果 <em>Divisor</em> 为零, <em>OutputVar</em> 将被置空. <em>Dividend</em> 和 <em>Divisor</em> 都可以为小数. 如果 <em>Divisor</em> 为负数, 在计算中将被视为正数处理. 下面这个例子结果为 2: <em>Transform, OutputVar, mod, 5, 3.</em> 对应函数: <a href="../Functions.htm#Mod">Mod(Dividend, Divisor)</a>.</p>
<p><strong>Pow, Base, Exponent</strong>: 获取底数 <em>Base</em> 的指数 <em>Exponent</em> 次幂. <em>Base</em> 和 <em>Exponent</em> 都可以为小数. 如果 <em>Exponent</em> 为负数, 即使 <em>Base</em> 和 <em>Exponent</em> 都为整数, <em>OutputVar</em> 也将被格式化为浮点数. 不支持 <em>Base</em> 为负数且 <em>Exponent</em> 为分数例如 1.5 的情况; 这将使得 <em>OutputVar</em> 被置空. 也请参见: <a href="../Variables.htm#pow">** operator</a>.</p>
<p><strong>Exp, N</strong>: 获取 e (其近似值为 2.71828182845905) 的 <em>N</em> 次幂. <em>N</em> 可以为负数也可以为小数. 对应函数: <a href="../Functions.htm#Exp">Exp(N)</a>.</p>
<p><strong>Sqrt, Value1</strong>: 获取 Value1 的平方根. 如果 <em>Value1</em> 为负数, <em>OutputVar</em> 将被置空. 对应函数: <a href="../Functions.htm#Sqrt">Sqrt(Number)</a>.</p>
<p><strong>Log, Value1</strong>: 获取 <em>Value1</em> 的对数 (底数为 10). 如果 <em>Value1</em> 为负数, <em>OutputVar</em> 将被置空. 对应函数: <a href="../Functions.htm#Log">Log(Number)</a>.</p>
<p><strong>Ln, Value1</strong>: 获取 <em>Value1</em> 的自然对数 (底数为 e). 如果 <em>Value1</em> 为负数, <em>OutputVar</em> 将被置空. 对应函数: <a href="../Functions.htm#Ln">Ln(Number)</a>.</p>
<p><strong>Round, Value1 [, N]</strong>: 如果 <em>N</em> 省略, <em>OutputVar</em> 将被设置为 <em>Value1</em> 四舍五入后的整数. 如果 <em>N</em> 为正数, 则将 <em>Value1</em> 取整到 <em>N</em> 个小数位. 如果 <em>N</em> 为负数, 则将 <em>Value1</em> 取整到小数点左边 <em>N</em> 位. 例如, -1 取整到个位, -2 取整到十位, 而 -3 取整到百位. 注意: 取整小数位时不会移除末尾的零. 例如, 把 12.333 取整到十分位后将变成 12.300000. 在操作前使用像 <em><a href="SetFormat.htm">SetFormat</a>, float, 0.1</em> 的命令可以改变此行为 (事实上, 第一步使用 <a href="SetFormat.htm">SetFormat</a> 后可能不需要再使用 Round 了). 对应函数: <a href="../Functions.htm#Round">Round(Number [, N])</a>.</p>
<p><strong>Ceil, Value1</strong>: 获取 <em>Value1</em> 向上取的最近的整数. 对应函数: <a href="../Functions.htm#Ceil">Ceil(Number)</a>.</p>
<p><strong>Floor, Value1</strong>: 获取 <em>Value1</em> 向下取的最近的整数. 对应函数: <a href="../Functions.htm#Floor">Floor(Number)</a>.</p>
<p><strong>Abs, Value1</strong>: 获取 <em>Value1</em> 的绝对值, 这是通过移除 <em>Value1</em> 前面的负号(破折号) (如果有的话) 来计算的. 对应函数: <a href="../Functions.htm#Abs">Abs(Number)</a>.</p>
<p><strong>Sin, Value1</strong>: 获取 <em>Value1</em> 的正弦三角函数值. <em>Value1</em> 必须用弧度表示. 对应函数: <a href="../Functions.htm#Sin">Sin(Number)</a>.</p>
<p><strong>Cos, Value1</strong>: 获取 <em>Value1</em> 的余弦三角函数值. <em>Value1</em> 必须用弧度表示. 对应函数: <a href="../Functions.htm#Cos">Cos(Number)</a>.</p>
<p><strong>Tan, Value1</strong>: 获取 <em>Value1</em> 的正切三角函数值. <em>Value1</em> 必须用弧度表示. 对应函数: <a href="../Functions.htm#Tan">Tan(Number)</a>.</p>
<p><strong>ASin, Value1</strong>: 获取弧度表示的反正弦值 (此数字的正弦值为 <em>Value1</em>). 如果 <em>Value1</em> 小于 -1 或大于 1, <em>OutputVar</em> 将被置空. 对应函数: <a href="../Functions.htm#ASin">ASin(Number)</a>.</p>
<p><strong>ACos, Value1</strong>: 返回弧度表示的反余弦值 (此数字的余弦值为 <em>Value1</em>). 如果 <em>Value1</em> 小于 -1 或大于 1, <em>OutputVar</em> 将被置空. 对应函数: <a href="../Functions.htm#ACos">ACos(Number)</a>.</p>
<p><strong>ATan, Value1</strong>: 返回弧度表示的反正切值 (此数字的正切值为 <em>Value1</em>). 对应函数: <a href="../Functions.htm#ATan">ATan(Number)</a>.</p>
<p><br>
注意: 下面的每个按位操作都有一个用于表达式中的更简洁的 <a href="../Variables.htm#bitwise">按位运算符</a>.</p>
<p><strong>BitNot, Value1</strong>: 把 <em>Value1</em> 按位取反后保存到 <em>OutputVar</em> (如果 <em>Value1</em> 是浮点数, 在计算前把它截取成整数). 如果 <em>Value1</em> 介于 0 和 4294967295 (0xffffffff) 之间, 它将被视为 <u>无符号的</u> 32 位值. 否则, 它被视为 <u>有符号的</u> 64 位值. 后面的例子结果为 0xfffff0f0 (4294963440): Transform, OutputVar, BitNot, 0xf0f</p>
<p><strong>BitAnd, Value1, Value2</strong>: 获取 <em>Value1</em> 和 <em>Value2</em> 按位与运算的结果 (在计算前首先把浮点数截取成整数). 后面的例子结果为 0xff00 (65280): Transform, OutputVar, BitAnd, 0xff0f, 0xfff0</p>
<p><strong>BitOr, Value1, Value2</strong>: 获取 <em>Value1</em> 和 <em>Value2</em> 按位或运算的结果 (在计算前首先把浮点数截取成整数). 后面的例子结果为 0xf0f0 (61680): Transform, OutputVar, BitOr, 0xf000, 0x00f0</p>
<p><strong>BitXOr, Value1, Value2</strong>: 获取 <em>Value1</em> 和 <em>Value2</em> 按位异或运算的结果 (在计算前首先把浮点数截取成整数). 后面的例子结果为 0xff00 (65280): Transform, OutputVar, BitXOr, 0xf00f, 0x0f0f</p>
<p><strong>BitShiftLeft, Value1, Value2</strong>: 获取 <em>Value1</em> 往左移动 <em>Value2</em> 个位的结果, 这相当于 <em>Value1</em> 乘以 "2 的 <em>Value2</em> 次幂" (在计算前首先把浮点数截取成整数). 下面这个例子结果为 8: Transform, OutputVar, BitShiftLeft, 1, 3</p>
<p><strong>BitShiftRight, Value1, Value2</strong>: 获取 <em>Value1</em> 往右移动 <em>Value2</em> 个位的结果, 这相当于 <em>Value1</em> 除以 "2 的 <em>Value2</em> 次幂", 舍去余数 (在计算前首先把浮点数截取成整数). 下面这个例子结果为 2: Transform, OutputVar, BitShiftRight, 17, 3</p>
<h3>备注</h3>
<p>接受数值参数的子命令在它们的这些参数中也可以使用 <a href="../Variables.htm#Expressions">表达式</a>.</p>
<p>如果 <em>Value1 </em> 或 <em>Value2</em> 是一个浮点数, 后面的 <em>Cmd</em> 获取的结果将为浮点数而不是整数: Mod, Pow, Round, 和 Abs. 获取结果的小数位数由 <a href="SetFormat.htm">SetFormat</a> 决定.</p>
<p>要将弧度转换成角度, 将其乘以 180/pi (约为 57.29578). 要将角度转换成弧度, 将其乘以 pi/180 (约为 0.01745329252).</p>
<p>pi 的值 (约为 3.141592653589793) 为 1 的反正切值乘以 4.</p>
<h3>相关</h3>
<p><a href="SetFormat.htm">SetFormat</a>, <a href="../Variables.htm#Expressions">表达式</a>, <a href="EnvMult.htm">EnvMult</a>, <a href="EnvDiv.htm">EnvDiv</a>, <a href="StringLower.htm">StringLower</a>, <a href="IfIs.htm">if var is type</a> </p>
<h3>示例</h3>
<pre class="NoIndent">Transform, OutputVar, Asc, A <em>; Get the ASCII code of the letter A.</em></pre>

</body>
</html>
